package com.powernode.controller;

import com.powernode.domain.SysMenu;
import com.powernode.model.Result;
import com.powernode.service.SysMenuService;
import com.powernode.util.AuthUtils;
import com.powernode.vo.MenuAndPermsVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Set;
@Api(tags = "系统权限接口管理")
@RequestMapping("sys/menu")
@RestController
 public class SysMenuController {
    @Autowired
    private SysMenuService sysMenuService;
    /*
     * 查询登录用户的菜单和权限
     * @author RenBoQing
     * @date 2024/7/18 23:17
     * @return com.powernode.model.Result<com.powernode.vo.MenuAndPermsVo>
     */
    @ApiOperation("查询登录用户的菜单和权限")
    @GetMapping("/nav")
    public Result<MenuAndPermsVo> loadUserMenuAndPerms() {
        // 获取当前登录用户ID
        Long userId = AuthUtils.getLoginUserId();
        // 查询当前登录用户的权限集合
        Set<String> perms = AuthUtils.getPerms();
        // 根据用户ID查询菜单集合
        Set<SysMenu> menus = sysMenuService.queryUserMenus(userId);
        // 创建菜单和权限集合对象
        MenuAndPermsVo menuAndPermsVo = new MenuAndPermsVo(menus, perms);
        // 返回菜单和权限集合对象
        return Result.success(menuAndPermsVo);
    }
    /*
     * 查询系统所有的权限集合
     * @author RenBoQing
     * @date 2024/7/18 23:17
     * @return com.powernode.model.Result<java.util.List<com.powernode.domain.SysMenu>>
     */
    @ApiOperation("查询系统所有的权限集合")
    @GetMapping("/table")
    @PreAuthorize("hasAuthority('sys:menu:list')")
    public Result<List<SysMenu>> loadAllSysMenuList() {
        // 查询系统菜单集合
        List<SysMenu> menus = sysMenuService.queryAllSysMenuList();
        // 返回菜单集合
        return Result.success(menus);
    }
    /*
     *新增权限
     * @author RenBoQing
     * @date 2024/7/18 23:18
     * @param sysMenu
     * @return com.powernode.model.Result<java.lang.String>
     */
    @ApiOperation("新增权限")
    @PostMapping("")
    @PreAuthorize("hasAuthority('sys:menu:save')")
    public Result<String> saveSysMenu(@RequestBody SysMenu sysMenu) {
        // 调用业务层方法
        boolean result = sysMenuService.saveSysMenu(sysMenu);
        // 返回成功
        return Result.handle(result);
    }
    /*
     * 根据菜单的标识查询相关信息
     * @author RenBoQing
     * @date 2024/7/18 23:32
     * @param menuId
     * @return com.powernode.model.Result<com.powernode.domain.SysMenu>
     */
    @ApiOperation("根据菜单的标识查询相关信息")
    @GetMapping("/info/{menuId}")
    @PreAuthorize("hasAuthority('sys:menu:info')")
    public Result<SysMenu> loadSysMenuInfo(@PathVariable Long menuId) {
        // 调用业务层方法
        SysMenu sysMenu = sysMenuService.getById(menuId);
        // 返回菜单信息
        return Result.success(sysMenu);
    }

    /* 修改菜单权限信息
     * 修改权限信息
     * @author RenBoQing
     * @date 2024/7/18 23:32
     * @param sysMenu
     * @return com.powernode.model.Result<java.lang.String>
     */
    @ApiOperation("修改菜单权限信息")
    @PutMapping("")
    @PreAuthorize("hasAuthority('sys:menu:update')")
    public Result<String> modifySysMenu(@RequestBody SysMenu sysMenu) {
        // 调用业务层方法
        boolean result = sysMenuService.modifySysMenu(sysMenu);
        // 返回成功
        return Result.handle(result);
    }
    /*
     * 删除菜单权限信息
     * @author RenBoQing
     * @date 2024/7/21 11:15
     * @param menuId
     * @return com.powernode.model.Result<java.lang.String>
     */
    @ApiOperation("删除菜单权限信息")
    @DeleteMapping("/{menuId}")
    @PreAuthorize("hasAuthority('sys:menu:delete')")
    public Result<String> deleteSysMenu(@PathVariable Long menuId) {
        // 调用业务层方法
        boolean result = sysMenuService.removeSysMenuById(menuId);
        // 返回成功
        return Result.handle(result);
    }
}